package com.webserver.Controller;

import com.sun.deploy.net.HttpResponse;
import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;
import com.webserver.vo.User;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

//本类用于处理与用户相关的请求操作：
public class UserController {
    //该File对象表示用于表示所有用户信息保存的目录：
    private static File userDir;

    static{
        userDir = new File("./users");
        if (!userDir.exists()){
            userDir.mkdirs();//如果不存在则创建该文件
        }
    }



    public void login(HttpServletRequest request, HttpServletResponse response){
//        获取用户输入的一下信息：
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        if (username==null || password ==null){
            File file= new File("./webapps/myweb/login_error.html");
            response.setEntity(file);
        }

        //1处理了登录成功的业务：
            //给登录的用户，以用户名来命名保存文件：
        File userFile = new File(userDir,username+".obj");//文件的后缀是.obj
        //判断文件是否存在：
        if (userFile.exists()){

            try (
                    FileInputStream fis = new FileInputStream(userFile);
                    ObjectInputStream ois = new ObjectInputStream(fis);
                 )
            {   //反序列化读取用户信息：
                User user = (User)ois.readObject();
                //比较密码：（密码是否一致，一致则登录成功）
                if (user.getPassword().equals(password)){
                    File file = new File("./webapps/myweb/login");
                    response.setEntity(file);
                    return;
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        //2处理登录失败的业务：
        File file = new File("./webapps/myweb/login_fail");
        response.setEntity(file);

        System.out.println("登录业务处理完毕");

    }

    /*
        处理用户注册操作的请求：
     */
    public void reg(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("开始处理注册...");

        //1、获取用户在注册页面上表单中提交上来的注册信息
        //调用getParameter用于获取浏览器传递过来的参数.
        //参数与表单中输入框的名字一致
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String nickname = request.getParameter("nickname");
        String ageStr = request.getParameter("age");
        System.out.println(username + "," + password + "," + nickname + "," + ageStr);

        /*业务1：验证输入框
            必要的验证工作：
            1：要求上述四个信息用户必须在页面上输入，不能有null
            2：年龄必须是一个数字格式
            否则直接响应一个页面：reg_info_error.html
            该页面居中显示一行字：注册失败，注册信息输入有误，请重新输入！
         */

        //注册业务1:验证输入框是否为空和年龄框是否为0-9的数字
        if (username==null || password==null || nickname==null
            || ageStr==null ||!ageStr.matches("[0-9]+")){
            File file = new File("./webapps/myweb/reg_error.html");
            response.setEntity(file);
            return;
        }

        //注册业务2：用户名是否被占用
        File userFile = new File(userDir,username+".obj");
        if (userFile.exists()){
            File file = new File("./webapps/myweb/reg_have_user.html");
            response.setEntity(file);
            return;
        }

        //注册业务3：成功注册：
        int age = Integer.parseInt(ageStr);
        //2、将该用户信息保存：
        //将当前用户以一个User对象形式序列化到文件中：
        User user = new User(username,password,nickname,age);
        try(
                FileOutputStream fos = new FileOutputStream(userFile);
                ObjectOutputStream oos = new ObjectOutputStream(fos);

             )
        {
            oos.writeObject(user);
            System.out.println("注册信息写出完毕！");
            File file = new File("./webapps/myweb/reg_success.html");
            response.setEntity(file);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } ;

        System.out.println("注册处理完毕");
    }

}
